home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / msdos / css / source / dith.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-10-19  |  51.7 KB  |  1,428 lines

  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <glib.h>
  5. #include <strlib.h>
  6.  
  7. #include "land.h"
  8.  
  9. #define MASK 0x40004000L
  10.  
  11. int xpixel, ypixel, xypixel, goutcnt = 0;
  12.  
  13. static int rnum(void)
  14. {   
  15. static long rnd = 12345678L;
  16.    rnd <<= 1;
  17.    if ((rnd & MASK) == 0 || (rnd & MASK) == MASK) rnd++;
  18.    return((int)rnd);
  19. }
  20.  
  21. static int dith(int x, int y)
  22. {
  23.    static char dztbl[4][4] = {
  24.       {  0, 12,  2, 14},
  25.       {  8,  4, 10,  7},
  26.       {  3, 15,  1, 13},
  27.       { 11,  6,  9,  5}
  28.    };
  29.    return((dztbl[x % 4][y % 4] * 256 + (rnum() & 0xff)) / 16);
  30. }
  31.  
  32. void pixset(int x, int y, int col[])
  33. {
  34. int  dx,  dy;
  35. int  ret, dot;
  36. unsigned gn, goffset;
  37.  
  38.  
  39.    for (dy = 0; dy < ypixel; dy++) {
  40.       for (dx = 0; dx < xpixel; dx++) {
  41.          dot = 0x00;
  42.          ret = dith(xpixel * x+ dx, ypixel * y + dy);
  43.          if (ret < col[0]) dot |= 0x0a; /* 0x02 red   +0x08 for intensity */
  44.          if (ret < col[1]) dot |= 0x0c; /* 0x04 green +0x08 for intensity */
  45.          if (ret < col[2]) dot |= 0x09; /* 0x01 blue  +0x08 for intensity */
  46.          GDS_pointColor(&GDS_data, dot);
  47.          GDS_pointFirst(&GDS_data, xpixel * x + dx, ypixel * y + dy);
  48.       /* pset(xpixel * x + dx, ypixel * y + dy, dot, PSET); */
  49.       }
  50.    }
  51.    if ((goutcnt += xypixel) >= 32) {
  52.       GDS_outputGraph(&GDS_data, &gn, &goffset);
  53.       GDS_resetData(&GDS_data);
  54.       goutcnt = 0;
  55.    }
  56. }
  57.  
  58. void dith2exec(int x, int y, int col)
  59. {
  60.    if (col < 0) {
  61.       line(x-2, y-2, x+33, y+18, PSET, col15, 1, 0xffff);
  62.       line(x-1, y-1, x+32, y+17, PSET, col0,  2, 0xffff);
  63.       msgset(x, y, "MENU", col15);
  64.    } else {
  65.       line(x-2, y-2, x+33, y+18, PSET, col,  1, 0xffff);
  66.       line(x-1, y-1, x+32, y+17, PSET, col7, 2, 0xffff);
  67.       msgset( x, y, "MENU", col);
  68.    }
  69. }
  70.  
  71. void dithmsg(int com, int sw)
  72. {
  73.    char hmsg1[80], hmsg2[80];
  74.    int col;
  75.  
  76.    hmsg1[0] = '\0'; hmsg2[0] = '\0';
  77.  
  78.    if (com == 7) {
  79.       strcpy(hmsg1, "レベル、作業領域、\x095\x05c示開始点を設定してください。");
  80.                                      /* 表 */
  81.       strcpy(hmsg2, "設定は ○、数字の部分をそれぞれ指定してください。");
  82.    }
  83.  
  84.    if (com == 8) {
  85.       strcpy(hmsg1, "レベル、作業領域を設定してください。");
  86.       strcpy(hmsg2, "設定は ○、数字の部分をそれぞれ指定してください。");
  87.    }
  88.  
  89.    if (com == 10) {
  90.       strcpy(hmsg1, "メイン・メニューにもどります。");
  91.    }
  92.    
  93.    if (com == 21) {
  94.       strcpy(hmsg1, "ライン開始点を設定してください。[ 1 ~ 201 ]");
  95.    }
  96.  
  97.    if (com == 22) {
  98.       strcpy(hmsg1, "ピクセル開始点を設定してください。[ 1 ~ 257 ]");
  99.    }
  100.  
  101.    if (sw == 0) col = col7;
  102.    else         col = col0;
  103.  
  104.    msgset(96, 315, hmsg1, col);
  105.    msgset(96, 335, hmsg2, col);
  106. }
  107.  
  108. void dithbox(int x, int y, int col[], int coln)
  109. {
  110. int i, j, k;
  111. int x2, y2;
  112.    
  113.    if (coln == 5) {
  114.       k =  8; x2 = x/2; y2 = y/2;
  115.    } else {
  116.       k = 16; x2 = x;   y2 = y;
  117.    }
  118.    for(j = 0; j < k; j++) {
  119.       for (i = 0; i < k; i++) pixset(x2+i, y2+j,  col);
  120.    }
  121.    line(x-1, y-1, x+15, y+15, PSET, col0, 1, 0xffff);
  122. }
  123.  
  124.  
  125. void dithset(int coln, int th1[][2], int th2[][2], int th3[][2], int sw)
  126. {
  127. int i, col, cx, cy;
  128. char swk1[10], swk2[10], swk3[10];
  129. int cold[3];
  130.  
  131.       if (sw == 1) {
  132.          line(90+1, 63+21, 350-1, 270-1, PSET, col7, 2, 0xffff);
  133.        /*  msgset( 80,  70, " カラーレベル、作業領域設定", col0); */
  134.          msgset(100, 210, "○    ○    ○ 領域1", col0);
  135.          msgset(100, 230, "○    ○    ○ 領域2", col0);
  136.          msgset(100, 250, "○    ○    ○ 領域3", col0);
  137.       }
  138.       sprintf(swk1, "< %3d", th1[0][0]);
  139.       symbol(118, 187+5, swk1, 1,1, col10, 0 ,PSET);
  140.       symbol(198, 187+5, swk1, 1,1, col10, 0 ,PSET);
  141.       symbol(278, 187+5, swk1, 1,1, col10, 0 ,PSET);
  142.       for (i = 0; i < coln;  i++) {
  143.          if (i < coln-1) col = col0;
  144.          else            col = col10;
  145.  
  146.          sprintf(swk1, "< %3d", th1[i+1][0]);
  147.          sprintf(swk2, "< %3d", th2[i+1][0]);
  148.          sprintf(swk3, "< %3d", th3[i+1][0]);
  149.          if (sw == 1) {
  150.             cold[0] = 256*i/(coln-1); cold[1] = 0; cold[2] = 0;
  151.             dithbox(100,  175+5-i*20, cold, coln);
  152.             cold[0] = 0; cold[1] = 256*i/(coln-1), cold[2] = 0;
  153.             dithbox(180,  175+5-i*20, cold, coln);
  154.             cold[0] = 0; cold[1] = 0; cold[2] = 256*i/(coln-1);
  155.             dithbox(260,  175+5-i*20, cold, coln);
  156.          }
  157.          cx = 120; cy = 167+5-i*20;
  158.          line(cx-1, cy-1, cx+45, cy+9, PSET, col7, 2, 0xffff);
  159.          symbol(cx, cy, swk1, 1,1, col, 0 ,PSET);
  160.          line(cx+79, cy-1, cx+125, cy+9, PSET, col7, 2, 0xffff);
  161.          symbol(cx+80, cy, swk2, 1,1, col, 0 ,PSET);
  162.          line(cx+159, cy-1, cx+205, cy+9, PSET, col7, 2, 0xffff);
  163.          symbol(cx+160, cy, swk3, 1,1, col, 0 ,PSET);
  164.       }
  165. }
  166.  
  167. void dithchg(int cx, int cy, int coln, int th[][2], int th1[][2], int th2[][2], int th3[6][2],int leveln, int com)
  168. {
  169. int mosx = 360, mosy = 100, maxlv, minlv;
  170. char    ws2[80];
  171. double  wa = 0;
  172. int     wi = 0, i;
  173.  
  174.    ws2[0] = '\0';
  175.    while(1) {
  176.       if (coln == 2) {
  177.          maxlv = 255;
  178.          minlv = 1;
  179.          break;
  180.       }
  181.       if (leveln == 0) {
  182.          maxlv = th[coln-1][0] - (coln-2);
  183.          minlv = 1;
  184.          break;
  185.       }
  186.       if (leveln == coln -2 ) {
  187.          maxlv = 255;
  188.          minlv = th[1][0] + (coln-2);
  189.          break;
  190.       }
  191.       maxlv = th[leveln+2][0]-1;
  192.       minlv = th[leveln][0]+1;
  193.       break;
  194.    }
  195.    psmsgcls();
  196.    sprintf(ws2, "レベル設定範囲 [%d~%d]", minlv, maxlv);
  197.    pseudemsg2("レベルを設定してください。", ws2);
  198.  
  199.    if (calc( &mosx, &mosy, &wa) == 1) {
  200.       wi = wa;
  201.       if (wi < minlv) wi = minlv;
  202.       if (wi > maxlv) wi = maxlv;
  203.       while(1) {
  204.          if (coln == 2) {
  205.             th[0][1] = wi - 1;
  206.             th[1][0] = wi;
  207.             break;
  208.          }
  209.          if (leveln == 0) {
  210.             th[1][0] = wi;
  211.             th[0][1] = th[1][0] - 1;
  212.             for (i = 2; i < coln-1; i++) {
  213.                th[i][0] = (th[coln-1][0]-th[1][0])*(i-1)/(coln-2)+th[1][0];
  214.                th[i-1][1] = th[i][0] - 1;
  215.             }
  216.             th[coln-2][1] = th[coln-1][0]-1;
  217.             break;
  218.          }
  219.          if (leveln == coln -2 ) {
  220.             th[coln-1][0] = wi;
  221.             for (i = 2; i < coln-1; i++) {
  222.                th[i][0] = (th[coln-1][0]-th[1][0])*(i-1)/(coln-2)+th[1][0];
  223.                th[i-1][1] = th[i][0] - 1;
  224.             }
  225.             th[coln-2][1] = th[coln-1][0]-1;
  226.             break;
  227.          }
  228.          th[leveln+1][0] = wi;
  229.          th[leveln][1] = th[leveln+1][0] - 1;
  230.          break;
  231.       }
  232.       dithset(coln, th1, th2, th3, 0);
  233.       /* th level print for debug *
  234.       Locate(0,0); Color(2);
  235.       for (i = 0; i <= coln; i++) {
  236.          printf("col= %d-%d   %d-%d   %d-%d    \n", th1[i][0], th1[i][1], th2[i][0], th2[i][1], th3[i][0], th3[i][1]);
  237.       }
  238.       Color(7);
  239.       * end for denug */
  240.  
  241.       
  242.    }
  243.    psmsgcls();
  244.    return;
  245. }
  246.  
  247. void wareaset( int warea[])
  248. {
  249.       msgset(100, 210 + 20 * (warea[0]-1), "●", col0);
  250.       msgset(180, 210 + 20 * (warea[1]-1), "●", col0);
  251.       msgset(260, 210 + 20 * (warea[2]-1), "●", col0);
  252. }
  253.  
  254. /* return( command ) */
  255. int dith2menu( int com)
  256. {
  257. unsigned  ddadr[2];
  258. unsigned  char page;
  259. char buf[30175]; /* (397*152+7)/8*4 */
  260. int x, y, x2, y2;
  261. int mx=0, my=0, time=0;
  262.  
  263.    x = 60; y = 65;
  264.    page = 0;
  265.    BSETDATAADR(ddadr,  buf);
  266.    GDS_getBlock(ddadr[0],  ddadr[1],  page, x,  y, x+396, y+151);
  267.  
  268.    helpbox( x, y, x+390, y+120, "ディザカラー・メニュー");
  269.    msgset(x, y+30, " ○ ポイント位置\x095\x05c示", col0);
  270.                                       /* 表 */
  271.    msgset(x, y+50, " ○ 拡大\x095\x05c示", col0);
  272.                               /* 表 */
  273.    msgset(x, y+70, " ○ 三次元\x095\x05c示", col0);
  274.                                     /* 表 */
  275.    msgset(x+190, y+70, " ○ 終 了", col0);
  276.    execmsg(x+350, y+95, col0);
  277.    
  278.    while (1) {
  279.       if (time != 0) while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  280.       else time = 1;
  281.       if (xychk(mx, my, x+350, y+95, x+350+33, y+95+18) == 1) {
  282.          execmsg(x+350, y+95, -1);
  283.          while((MOS_rdpos(&mx, &my) & 0x01) == 1);
  284.          if (xychk(mx, my, x+350, y+95, x+350+33, y+95+18) == 0) {
  285.             execmsg(x+350, y+95, col0);
  286.             continue;
  287.          } else {
  288.             break;
  289.          }
  290.       }
  291.       if (com == 1)  { msgset(x+16, y+30, "●", col7); msgset(x+16, y+30, "○", col0); }
  292.       if (com == 2)  { msgset(x+16, y+50, "●", col7); msgset(x+16, y+50, "○", col0); }
  293.       if (com == 3)  { msgset(x+16, y+70, "●", col7); msgset(x+16, y+70, "○", col0); }
  294.       if (com == -1) { msgset(x+16+190, y+70, "●", col7); msgset(x+16+190, y+70, "○", col0); }
  295.       line(x+1, y+95, x+345, y+112, PSET, col7, 2, 0xffff);
  296.       if(xychk16(mx, my, x+16, y+30) == 1)     com = 1;
  297.       if(xychk16(mx, my, x+16, y+50) == 1)     com = 2;
  298.       if(xychk16(mx, my, x+16, y+70) == 1)     com = 3;
  299.       if(xychk16(mx, my, x+16+190, y+70) == 1) com = -1;
  300.       if (com == 1) {
  301.          msgset(x+16, y+30, "●", col0);
  302.          msgset(x+16, y+95, "カー\x083\x05cル位置\x095\x05c示をします。[5個所まで]", col0);
  303.                                 /*  ソ            表 */
  304.       }
  305.       if (com == 2) {
  306.          msgset(x+16, y+50, "●", col0);
  307.          msgset(x+16, y+95, "画像の拡大\x095\x05c示をします。[2~64倍まで]", col0);
  308.       }                                /* 表 */
  309.       if (com == 3) {
  310.          msgset(x+16, y+70, "●", col0);
  311.          msgset(x+16, y+95, "三次元画像\x095\x05c示をします。", col0);
  312.       }                                /* 表 */
  313.       if (com == -1) {
  314.          msgset(x+16+190, y+70, "●", col0);
  315.          msgset(x+16, y+95, "ディザカラー\x095\x05c示を終了します", col0);
  316.                                          /* 表 */
  317.       }
  318.       while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  319.    }
  320.    GDS_putBlock(ddadr[0],  ddadr[1],  page, x,  y, x+396, y+151, PSET);
  321.    return(com);
  322. }
  323.  
  324. void marunum(int num, int x, int y, int col)
  325. {
  326. char wstr[2];
  327.  
  328.   /* msgset(x-7, y-7, "○", col); */
  329.    sprintf( wstr, "%1d", num);
  330.    msgset2( x-3, y-3, wstr, col);
  331. }
  332.  
  333.  
  334. void pointset( int lin, int pixel)
  335. {
  336. unsigned  char page;
  337. unsigned  ddadr[2], numddadr[5][2];
  338. char      buf[14212]; /* (128*222+7)/8*4 */
  339. char      numbuf[5][204]; /* (20*20+7)/8*4 */
  340. int  mx, my, mosx=350, mosy=100;
  341. int  mex=512, mey= 30; /* sub menu */
  342. int  i, loc[5][3];
  343. char wstr[32];
  344. int cuflag = 0;
  345.  
  346.    BSETDATAADR(ddadr,  buf); /* address set */
  347.    for (i=0; i<5; i++) {
  348.       BSETDATAADR(numddadr[i],  numbuf[i]); /* address set */
  349.    }
  350.    page = 0;
  351.    GDS_getBlock(ddadr[0],  ddadr[1],  page, mex,  mey, mex+127, mey+221);
  352.    helpbox( mex, mey, mex+120, mey+200, "ポイント位置\x095\x05c示");
  353.                                                   /* 表 */
  354.    msgset( mex+5, mey+30, "クリックで", col0);
  355.    msgset( mex+5, mey+50, "\x095\x05c示位置確定", col0);
  356.                            /* 表 */
  357.    mousemsg( mex+80, mey+95, "終了", col0);
  358.    msgset2( mex+30, mey+125, "ライン - ピクセル", col0); 
  359.    
  360.    for (i=0; i<5; i++) {
  361.       sprintf(wstr, "%1d)", i+1);
  362.       msgset2( mex+2, mey+135+10*i, wstr, col0);
  363.       loc[i][0] = 0;
  364.    }
  365.    while(1) {
  366.       while ((MOS_rdpos(&mx, &my) & 0x01) == 0) {
  367.          if (xychk(mx, my, 0, 0, 511, 399) == 1) {
  368.             if (cuflag == 0) { cuflag = 1; mcu4(); }
  369.          } else {
  370.             if (cuflag != 0) { cuflag = 0; mcu1(); }
  371.          }
  372.       }
  373.       if (xychk(mx, my, mex+80, mey+95, mex+80+32, mey+95+16) == 1) {
  374.          mousemsg( mex+80, mey+95, "終了", -1);
  375.          while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  376.          if (xychk(mx, my, mex+80, mey+95, mex+80+32, mey+95+16) == 1) {
  377.             break;
  378.          }
  379.          mousemsg( mex+80, mey+95, "終了", col0);
  380.       }
  381.       if (calchk(mx, my, 600, 355, &mosx, &mosy) == 1) continue;
  382.       if (xychk(mx, my, 0, 0, 511, 399) == 1) {
  383.          for (i=0; i<5; i++) {
  384.             if ((loc[i][0] != 0) && (xychk(mx, my, loc[i][1]-8, loc[i][2]-8, loc[i][1]+9, loc[i][2]+9) == 1)) {
  385.                loc[i][0] = 0; /* set flag off */
  386.                GDS_putBlock(numddadr[i][0],  numddadr[i][1],  page, loc[i][1]-5, loc[i][2]-5, loc[i][1]+6, loc[i][2]+6, PSET);
  387.                line( mex+25, mey+135+10*i,mex+119, mey+144+10*i, PSET, col7, 2, 0xffff);
  388.                break;
  389.             }
  390.          }
  391.          if (i == 5) { /* if not clear set position */
  392.             for (i=0; i<5; i++) {
  393.                if (loc[i][0] == 0) {
  394.                   loc[i][0] = 1; /* set flag on */
  395.                   loc[i][1] = mx; loc[i][2] = my;
  396.                   GDS_getBlock(numddadr[i][0],  numddadr[i][1],  page, mx-5, my-5, mx+6, my+6);
  397.                   marunum(i+1, mx, my, col15);
  398.                   sprintf( wstr, "%4d - %4d", lin+my/ypixel, pixel+mx/xpixel);
  399.                   msgset2( mex+22, mey+135+10*i, wstr, col15);
  400.                   break;
  401.                }
  402.             }
  403.          }
  404.       }
  405.       while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  406.    }
  407.    /*
  408.    while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  409.    while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  410.    */
  411.    
  412.    /* restore */
  413.    for (i=0; i<5; i++) {
  414.       if (loc[i][0] != 0) {
  415.          GDS_putBlock(numddadr[i][0],  numddadr[i][1],  page, loc[i][1]-5, loc[i][2]-5, loc[i][1]+6, loc[i][2]+6, PSET);
  416.          line( mex+22, mey+135+10*i,mex+119, mey+144+10*i, PSET, col7, 2, 0xffff);
  417.       }
  418.    }
  419.    GDS_putBlock(ddadr[0],  ddadr[1],  page, mex,  mey, mex+127, mey+221, PSET);
  420. }
  421.  
  422. /* 裏画面表示 */
  423. void backexp(int mx, int my, int x1, int y1, int x2, int y2)
  424. {
  425. unsigned  char page;
  426.  
  427.    if (xychk(mx, my, x1, y1, x2, y2) == 1) { /* 裏画面表示 */
  428.       page = 1;
  429.       GDS_displayPage(page);
  430.       gout();
  431.       while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  432.       while (1) {
  433.          while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  434.          if (xychk(mx, my, x1, y1, x2, y2) == 1) {
  435.             page = 0;
  436.             GDS_displayPage(page);
  437.             gout();
  438.             while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  439.             break;
  440.          }
  441.       }
  442.    }
  443. }
  444.  
  445. void sizechg( int lin, int pixel)
  446. {
  447. char buf1x[323], buf2x[323], buf1y[203], buf2y[203]; /* (640*1+7)/8*4,  (400*1+7)/8*4  */
  448. unsigned  ddadr1x[2], ddadr2x[2], ddadr1y[2], ddadr2y[2];
  449. unsigned  char page, sPage, dPage;
  450. unsigned  ddadr[2];
  451. char      buf[11012]; /* (128*172+7)/8*4 */
  452. unsigned  pddadr[2];
  453. char      pbuf[2052]; /* (64*64+7)/8*4 */
  454. int  mx, my, mosx=350, mosy=100;
  455. int  mex=512, mey= 30; /* sub menu */
  456. int  siz=2, ret;
  457. char wstr[20];
  458. double  wa;
  459. int  bx=128, by=100, bx2, by2, xsiz=256, ysiz=200;
  460. int  i, j, kx, ky, m, n;
  461.  
  462.    BSETDATAADR(ddadr1x, buf1x);
  463.    BSETDATAADR(ddadr2x, buf2x);
  464.    BSETDATAADR(ddadr1y, buf1y);
  465.    BSETDATAADR(ddadr2y, buf2y);
  466.  
  467.    BSETDATAADR(ddadr,  buf); /* address set */
  468.    BSETDATAADR(pddadr, pbuf); /* point buf address set */
  469.  
  470.    page = 0;
  471.    GDS_getBlock(ddadr[0],  ddadr[1],  page, mex,  mey, mex+127, mey+171);
  472.    helpbox( mex, mey, mex+120, mey+163, "拡大\x095\x05c示");
  473.                                              /* 表 */
  474.    msgset( mex+5, mey+30, "枠内ドラッグで", col0);
  475.    msgset( mex+5, mey+50, "\x095\x05c示位置移動", col0);
  476.                            /* 表 */
  477.    msgset( mex+5, mey+80, "\x095\x05c示倍率", col0);
  478.                            /* 表 */
  479.    line(mex+72, mey+78, mex+72+32, mey+98, PSET, col12, 1, 0xffff);
  480.    sprintf(wstr, "%3d", siz);
  481.    msgset(mex+76, mey+80, wstr, col0);
  482.    recogmsg(mex+30,  mey+140, col0);
  483.    mousemsg( mex+70, mey+140, "終了", col0);
  484.  
  485.    /* ボックス作成 */
  486.    GDS_getBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by);
  487.    GDS_getBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1);
  488.    GDS_getBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2);
  489.    GDS_getBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2);
  490.    line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
  491.    sprintf(wstr, "L%3d-P%3d/", lin+by/ypixel, pixel+bx/xpixel);
  492.    msgset2(mex+16, mey+110, wstr, col0);
  493.    sprintf(wstr, "L%3d-P%3d", lin+(by+ysiz-1)/ypixel, pixel+(bx+xsiz-1)/xpixel);
  494.    msgset2(mex+16, mey+120, wstr, col0);
  495.    
  496.    while(1) {
  497.      while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  498.      if (calchk(mx, my, 600, 355, &mosx, &mosy) == 1) continue;
  499.      if (xychk( mx, my, mex+72, mey+78, mex+72+32, mey+98) == 1) { /* 拡大率 */
  500.         if (calc( &mosx, &mosy, &wa) != 0) {
  501.              siz=wa;
  502.              if      (siz <  2) siz =  2;
  503.              else if (siz > 64) siz = 64;
  504.              line(mex+72+1, mey+78+1, mex+72+32-1, mey+98-1, PSET, col7, 2, 0xffff);
  505.              sprintf(wstr, "%3d", siz);
  506.              msgset(mex+76, mey+80, wstr, col0);
  507.              GDS_putBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by, PSET);
  508.              GDS_putBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET);
  509.              GDS_putBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2, PSET);
  510.              GDS_putBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2, PSET);
  511.              xsiz = 512 / siz; ysiz = 400 / siz; bx = 256 - xsiz / 2; by = 200 - ysiz / 2;
  512.              GDS_getBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by);
  513.              GDS_getBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1);
  514.              GDS_getBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2);
  515.              GDS_getBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2);
  516.              line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
  517.              line(mex+1, mey+110, mex+119, mey+130, PSET, col7, 2, 0xffff);
  518.              sprintf(wstr, "L%3d-P%3d/", lin+by/ypixel, pixel+bx/xpixel);
  519.              msgset2(mex+16, mey+110, wstr, col0);
  520.              sprintf(wstr, "L%3d-P%3d", lin+(by+ysiz-1)/ypixel, pixel+(bx+xsiz-1)/xpixel);
  521.              msgset2(mex+16, mey+120, wstr, col0);
  522.         }
  523.         continue;
  524.      }
  525.      if (xychk( mx, my, bx, by, bx+xsiz-1, by+ysiz-1) == 1) { /* ボックス移動 */
  526.         MOS_horizon(mx-bx, 511-((bx+xsiz-1)-mx));
  527.         MOS_vertical(my-by, 399-((by+ysiz-1)-my));
  528.         mcu3();
  529.         bx2 = bx; by2 = by;
  530.         movbox(&bx2, &by2, xsiz, ysiz, mx-bx, my-by);
  531.         GDS_putBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by, PSET);
  532.         GDS_putBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET);
  533.         GDS_putBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2, PSET);
  534.         GDS_putBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2, PSET);
  535.         bx = bx2; by = by2;
  536.         GDS_getBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by);
  537.         GDS_getBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1);
  538.         GDS_getBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2);
  539.         GDS_getBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2);
  540.         line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
  541.         line(mex+1, mey+110, mex+119, mey+130, PSET, col7, 2, 0xffff);
  542.         sprintf(wstr, "L%3d-P%3d/", lin+by/ypixel, pixel+bx/xpixel);
  543.         msgset2(mex+16, mey+110, wstr, col0);
  544.         sprintf(wstr, "L%3d-P%3d", lin+(by+ysiz-1)/ypixel, pixel+(bx+xsiz-1)/xpixel);
  545.         msgset2(mex+16, mey+120, wstr, col0);
  546.         MOS_horizon(0, 639);
  547.         MOS_vertical(0, 399);
  548.         mcu1();
  549.      }
  550.      if (xychk(mx, my, mex+70, mey+140, mex+70+32, mey+140+16) == 1) {
  551.         mousemsg( mex+70, mey+140, "終了", -1);
  552.         while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  553.         if (xychk(mx, my, mex+70, mey+140, mex+70+32, mey+140+16) == 1) {
  554.            break;
  555.         }
  556.         mousemsg( mex+70, mey+140, "終了", col0);
  557.      }
  558.      if (recogin2( mx, my, mex+30, mey+140, 0) == 1) { /* 実行 */
  559.         /* 原画復帰 */
  560.         page = 0;
  561.         GDS_putBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by, PSET);
  562.         GDS_putBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET);
  563.         GDS_putBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2, PSET);
  564.         GDS_putBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2, PSET);
  565.         
  566.         page = 1;
  567.         GDS_writePage(page);
  568.         gout();
  569.         line(516, 54, 638, 74, PSET, col7, 2, 0xffff);
  570.         sprintf( wstr, "L%3d-P%3d/", lin+by/ypixel, pixel+bx/xpixel);
  571.         msgset2(516, 55, wstr, col0);
  572.         sprintf( wstr, "L%3d-P%3d", lin+(by+ysiz-1)/ypixel, pixel+(bx+xsiz-1)/xpixel);
  573.         msgset2(516, 65, wstr, col0);
  574.         line(0, 0, 511, 399, PSET, col0, 2, 0xffff);
  575.         line(526-2, 355-2, 526+33, 355+18, PSET, col7, 2, 0xffff); /* 確認メッセージ消去 */
  576.         GDS_displayPage(page);
  577.         gout();
  578.  
  579.         /* 拡大表示     */
  580.         ky = 0;
  581.         for (j = by; j < by+ysiz; j++) {
  582.            kx = 0;
  583.            for (i = bx; i < bx+xsiz; i++) {
  584.               /* GDS_getBlock(pddadr[0], pddadr[1], sPage, i, j, i, j); */
  585.               sPage = 0; dPage = 1;
  586.               for (m = 0; m < siz; m++) {
  587.                  GDS_copyBlock(sPage, i, j, i, j, dPage, kx+m, ky, PSET);
  588.                 /* GDS_putBlock(pddadr[0], pddadr[1],  dPage, kx+m, ky, kx+m, ky, PSET); */
  589.               }
  590.               /* GDS_getBlock(pddadr[0], pddadr[1], dPage, kx, ky, kx+siz-1, ky); */
  591.               sPage = 1; dPage = 1;
  592.               for (n = 1; n < siz; n++) {
  593.                  GDS_copyBlock(sPage, kx, ky, kx+siz-1, ky, dPage, kx, ky+n, PSET);
  594.                 /* GDS_putBlock(pddadr[0], pddadr[1], dPage, kx, ky+n, kx+siz-1, ky+n, PSET); */
  595.               }
  596.               kx += siz;
  597.            }
  598.            ky += siz;
  599.         }
  600.         /* 拡大表示終了 */
  601.         recogmsg( 526, 355, col0);
  602.         while(1) {
  603.            while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  604.            if (recogin2( mx, my, 526, 355, 0) == 1) {
  605.               line(526-2, 355-2, 526+33, 355+18, PSET, col7, 2, 0xffff); /* 確認メッセージ消去 */
  606.               page = 0;
  607.               GDS_writePage(page);
  608.               GDS_displayPage(page);
  609.               gout();
  610.               line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
  611.               break;
  612.            }
  613.         }
  614.         recogmsg(mex+30,  mey+140, col0);
  615.       }
  616.       /* 裏画面表示 */
  617.       backexp(mx, my,  630, 0, 639, 20);
  618.       continue;
  619.    }
  620.    /*
  621.    while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  622.    while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  623.    */
  624.    
  625.    /* ボックスの消去 */
  626.    GDS_putBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by, PSET);
  627.    GDS_putBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET);
  628.    GDS_putBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2, PSET);
  629.    GDS_putBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2, PSET);
  630.    /* メニューの消去 */
  631.    GDS_putBlock(ddadr[0],  ddadr[1],  page, mex,  mey, mex+127, mey+171, PSET);
  632. }
  633.  
  634. void gr3dbox(int bx, int by, int xsiz, int ysiz, int angle)
  635. {
  636.     if (angle == 0) { /* 見る方向の決定 右下 */
  637.        line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
  638.        line(bx+xsiz-10, by+ysiz-1,  bx+xsiz-1, by+ysiz-1, PSET, col10, 0, 0xffff);
  639.        line(bx+xsiz-1,  by+ysiz-10, bx+xsiz-1, by+ysiz-1, PSET, col10, 0, 0xffff);
  640.        return;
  641.     }
  642.     if (angle == 1) { /* 見る方向の決定 右上 */
  643.        line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
  644.        line(bx+xsiz-10, by, bx+xsiz-1, by, PSET, col10, 0, 0xffff);
  645.        line(bx+xsiz-1, by, bx+xsiz-1, by+10, PSET, col10, 0, 0xffff);
  646.        return;
  647.     }
  648.     if (angle == 2) { /* 見る方向の決定 左上 */
  649.        line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
  650.        line(bx, by, bx+10, by, PSET, col10, 0, 0xffff);
  651.        line(bx, by, bx, by+10, PSET, col10, 0, 0xffff);
  652.        return;
  653.     }
  654.     if (angle == 3) { /* 見る方向の決定 左下 */
  655.        line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
  656.        line(bx, by+ysiz-1, bx+10, by+ysiz-1, PSET, col10, 0, 0xffff);
  657.        line(bx, by+ysiz-10, bx, by+ysiz-1, PSET, col10, 0, 0xffff);
  658.        return;
  659.     }
  660. }
  661.  
  662. void gr3dexe( int angle, int lin, int pixel, int bx, int by)
  663. {
  664.  int i, j, k, m, n, p, q, max[512];
  665.  char  wstr[24];
  666.  long  ywid;
  667.  unsigned  char sPage, dPage;
  668.  unsigned  char huge *ptr;
  669.  
  670.       for (i = 0; i < 512; i++) max[i] = 400;
  671.       
  672.       if (angle == 0 || angle == 2) {
  673.          line(40, 120, 40, 320, PSET, col9, 0, 0xffff);
  674.          line(40, 320, 40+255, 320, PSET, col9, 0, 0xffff);
  675.          line(40+255, 320, 40+255+180, 320-100, PSET, col9, 0, 0xffff);
  676.          for (i = 0; i <= 255; i += 20) { /* ピクセル */
  677.             if (angle == 0) {
  678.                j = 40+i;
  679.             } else {
  680.                j = 40+255-i;
  681.             }
  682.             line( j, 320, j, 323, PSET, col9, 0, 0xffff);
  683.             sprintf( wstr, "%3d", pixel+(bx+i)/xpixel);
  684.             symbol( j+4, 325+8, wstr, 1,1, col14, 3 ,PSET);
  685.          }
  686.          if (angle == 0) line(40+255, 320, 40+255, 323, PSET, col9, 0, 0xffff);
  687.          else            line(40, 320, 40, 323, PSET, col9, 0, 0xffff);
  688.          msgset2(150, 325+40, "[ピクセル]", col14);
  689.          for (i = 0; i <= 100; i += 10) { /* レベル */
  690.             line(40, 320-i*2, 37, 320-i*2, PSET, col9, 0, 0xffff);
  691.             sprintf( wstr, "%3d", i);
  692.             symbol( 40-30, 320-i*2-4, wstr, 1,1, col14, 0 ,PSET);
  693.          }
  694.          msgset2(10, 100, "[%]", col14);
  695.          for (i = 0; i <= 200; i += 20) { /* ライン */
  696.             j = i * 180L / 200L;
  697.             k = i * 100L / 200L;
  698.             line(40+255+j, 320-k, 40+255+j, 323-k, PSET, col9, 0, 0xffff);
  699.             if (angle == 0) sprintf( wstr, "%-4d", lin+(by+200-i)/ypixel);
  700.             else            sprintf( wstr, "%-4d", lin+(by+i)/ypixel);
  701.             symbol( 40+255+j-4, 325-k, wstr, 1,1, col14, 0 ,PSET);
  702.          }
  703.          msgset2(425, 280, "[ライン]", col14);
  704.       }
  705.       if (angle == 1 || angle == 3) {
  706.          line(470, 120, 470, 320, PSET, col9, 0, 0xffff);
  707.          line(470, 320, 470-255, 320, PSET, col9, 0, 0xffff);
  708.          line(470-255, 320, 470-255-180, 320-100, PSET, col9, 0, 0xffff);
  709.          for (i = 0; i <= 255; i += 20) { /* ビクセル */
  710.             if (angle == 3) {
  711.                j = 470-255+i;
  712.             } else {
  713.                j = 470 - i;
  714.             }
  715.             line(j, 320, j, 323, PSET, col9, 0, 0xffff);
  716.             sprintf( wstr, "%3d", pixel+(bx+i)/xpixel);
  717.             symbol( j+4, 325+8, wstr, 1,1, col14, 3 ,PSET);
  718.          }
  719.          if (angle == 3) line(470, 320, 470, 323, PSET, col9, 0, 0xffff);
  720.          else            line(470-255, 320, 470-255, 323, PSET, col9, 0, 0xffff);
  721.          msgset2(350, 325+40, "[ピクセル]", col14);
  722.          for (i = 0; i <= 100; i += 10) { /* レベル */
  723.             line(470, 320-i*2, 473, 320-i*2, PSET, col9, 0, 0xffff);
  724.             sprintf( wstr, "%3d", i);
  725.             symbol( 470+5, 320-i*2-4, wstr, 1,1, col14, 0 ,PSET);
  726.          }
  727.          msgset2(480, 100, "[%]", col14);
  728.          for (i = 0; i <= 200; i += 20) { /* ライン */
  729.             j = i * 180L / 200L;
  730.             k = i * 100L / 200L;
  731.             line(470-255-j, 320-k, 470-255-j, 323-k, PSET, col9, 0, 0xffff);
  732.             if (angle == 3) sprintf( wstr, "%4d", lin+(by+200-i)/ypixel);
  733.             else            sprintf( wstr, "%4d", lin+(by+i)/ypixel);
  734.             symbol( 470-255-j-32+4, 325-k, wstr, 1,1, col14, 0 ,PSET);
  735.          }
  736.          msgset2(50, 280, "[ライン]", col14);
  737.       }
  738. /* for debug */
  739. /*
  740.       for (i=0; i<400; i++) {
  741.          for (j=0; j < 512; j++) {
  742.             if (angle == 0 || angle == 3) WAREA[(long)i * 512L + j] = (399-i) / 2;
  743.             else                          WAREA[(long)i * 512L + j] = i / 2;
  744.          }
  745.       }
  746. */
  747. /* debug end */
  748.       sPage = 0; dPage = 1;
  749.       ywid = 512 / ypixel;
  750.       if (angle == 0 || angle == 3) {
  751.          for (i = 199; i >= 0; i--) {
  752.             j = i * 180L / 200L;
  753.             k = (199-i) * 100L / 200L;
  754.             m = (i + by)/ypixel;
  755.             ptr = WAREA+(long)m*ywid;
  756.             for (n = bx; n < bx+256; n++) {
  757.                if (angle == 0) p = 220 - j + n - bx;
  758.                else            p =  35 + j + n - bx;
  759.                                 /* 470- 255 - (180 - j) + n - bx; */
  760.                q = 320 - k - *(ptr+n/xpixel) * 200L /256L;
  761.                if (max[p] > q) {
  762.                   GDS_copyBlock(sPage, n, i+by, n, i+by, dPage, p, q, OR);
  763.                   max[p] = q;
  764.                }
  765.             }
  766.          }
  767.       }
  768.       if (angle == 1 || angle == 2) {
  769.          for (i = 0; i < 200; i++) {
  770.             j = i * 180L / 200L;
  771.             k = i * 100L / 200L;
  772.             m = (i + by)/ypixel;
  773.             ptr = WAREA+(long)m*ywid;
  774.             for (n = bx; n < bx+256; n++) {
  775.                if (angle == 2) p = 295 + j - n + bx;
  776.                else            p = 470 - j - n + bx;
  777.                q = 320 - k - *(ptr+n/xpixel) * 200L /256L;
  778.                if (max[p] > q) {
  779.                   GDS_copyBlock(sPage, n, i+by, n, i+by, dPage, p, q, OR);
  780.                   max[p] = q;
  781.                }
  782.             }
  783.          }
  784.       }
  785. }
  786.  
  787.  
  788. void gr3d( int lin, int pixel)
  789. {
  790. char buf1x[323], buf2x[323], buf1y[203], buf2y[203]; /* (640*1+7)/8*4,  (400*1+7)/8*4  */
  791. unsigned  ddadr1x[2], ddadr2x[2], ddadr1y[2], ddadr2y[2];
  792. unsigned  char page = 0, sPage, dPage;
  793. unsigned  ddadr[2];
  794. char      buf[11012]; /* (128*172+7)/8*4 */
  795. unsigned  pddadr[2];
  796. char      pbuf[2052]; /* (64*64+7)/8*4 */
  797. int  mx, my, mosx=350, mosy=100;
  798. int  mex=512, mey= 30; /* sub menu */
  799. int  siz=2, ret;
  800. char wstr[20];
  801. double  wa;
  802. int  bx=128, by=100, bx2, by2, xsiz=256, ysiz=200;
  803. int  i, j, kx, ky, m, n;
  804. int  angle;
  805.  
  806.    BSETDATAADR(ddadr1x, buf1x);
  807.    BSETDATAADR(ddadr2x, buf2x);
  808.    BSETDATAADR(ddadr1y, buf1y);
  809.    BSETDATAADR(ddadr2y, buf2y);
  810.  
  811.    BSETDATAADR(ddadr,  buf); /* address set */
  812.    BSETDATAADR(pddadr, pbuf); /* point buf address set */
  813.  
  814.    page = 0;
  815.    GDS_getBlock(ddadr[0],  ddadr[1],  page, mex,  mey, mex+127, mey+171);
  816.    helpbox( mex, mey, mex+120, mey+163, "三次元\x095\x05c示");
  817.                                                      /* 表 */
  818.    msgset( mex+5, mey+30, "枠内ドラッグで", col0);
  819.    msgset( mex+5, mey+50, "\x095\x05c示位置移動", col0);
  820.                            /* 表 */
  821.    msgset( mex+5, mey+70, "四隅クリックで", col0);
  822.    msgset( mex+5, mey+90, "観測位置設定", col0);
  823.    recogmsg(mex+30,  mey+140, col0);
  824.    mousemsg( mex+70, mey+140, "終了", col0);
  825.  
  826.    /* ボックス作成 */
  827.    GDS_getBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by);
  828.    GDS_getBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1);
  829.    GDS_getBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2);
  830.    GDS_getBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2);
  831.    angle = 0;
  832.    gr3dbox(bx, by, xsiz, ysiz, angle);
  833.    sprintf(wstr, "L%3d-P%3d/", lin+by/ypixel, pixel+bx/xpixel);
  834.    msgset2(mex+16, mey+110, wstr, col0);
  835.    sprintf(wstr, "L%3d-P%3d", lin+(by+ysiz-1)/ypixel, pixel+(bx+xsiz-1)/xpixel);
  836.    msgset2(mex+16, mey+120, wstr, col0);
  837.    
  838.    while(1) {
  839.      while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  840.      if (calchk(mx, my, 600, 355, &mosx, &mosy) == 1) continue;
  841.      
  842.      if (xychk( mx, my, bx+xsiz-10, by+ysiz-10, bx+xsiz-1, by+ysiz-1) == 1) { /* 見る方向の決定 右下 */
  843.         angle = 0;
  844.         gr3dbox(bx, by, xsiz, ysiz, angle);
  845.         continue;
  846.      }
  847.      if (xychk( mx, my, bx+xsiz-10, by, bx+xsiz-1, by+10) == 1) { /* 見る方向の決定 右上 */
  848.         angle = 1;
  849.         gr3dbox(bx, by, xsiz, ysiz, angle);
  850.         continue;
  851.      }
  852.      if (xychk( mx, my, bx, by, bx+10, by+10) == 1) { /* 見る方向の決定 左上 */
  853.         angle = 2;
  854.         gr3dbox(bx, by, xsiz, ysiz, angle);
  855.         continue;
  856.      }
  857.      if (xychk( mx, my, bx, by+ysiz-10, bx+10, by+ysiz-1) == 1) { /* 見る方向の決定 左下 */
  858.         angle = 3;
  859.         gr3dbox(bx, by, xsiz, ysiz, angle);
  860.         continue;
  861.      }
  862.      
  863.      if (xychk( mx, my, bx, by, bx+xsiz-1, by+ysiz-1) == 1) { /* ボックス移動 */
  864.         MOS_horizon(mx-bx, 511-((bx+xsiz-1)-mx));
  865.         MOS_vertical(my-by, 399-((by+ysiz-1)-my));
  866.         mcu3();
  867.         bx2 = bx; by2 = by;
  868.         movbox(&bx2, &by2, xsiz, ysiz, mx-bx, my-by);
  869.         GDS_putBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by, PSET);
  870.         GDS_putBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET);
  871.         GDS_putBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2, PSET);
  872.         GDS_putBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2, PSET);
  873.         bx = bx2; by = by2;
  874.         GDS_getBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by);
  875.         GDS_getBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1);
  876.         GDS_getBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2);
  877.         GDS_getBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2);
  878.         gr3dbox(bx, by, xsiz, ysiz, angle);
  879.         line(mex+1, mey+110, mex+119, mey+130, PSET, col7, 2, 0xffff);
  880.         sprintf(wstr, "L%3d-P%3d/", lin+by/ypixel, pixel+bx/xpixel);
  881.         msgset2(mex+16, mey+110, wstr, col0);
  882.         sprintf(wstr, "L%3d-P%3d", lin+(by+ysiz-1)/ypixel, pixel+(bx+xsiz-1)/xpixel);
  883.         msgset2(mex+16, mey+120, wstr, col0);
  884.         MOS_horizon(0, 639);
  885.         MOS_vertical(0, 399);
  886.         mcu1();
  887.      }
  888.      if (xychk(mx, my, mex+70, mey+140, mex+70+32, mey+140+16) == 1) {
  889.         mousemsg( mex+70, mey+140, "終了", -1);
  890.         while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  891.         if (xychk(mx, my, mex+70, mey+140, mex+70+32, mey+140+16) == 1) {
  892.            break;
  893.         }
  894.         mousemsg( mex+70, mey+140, "終了", col0);
  895.      }
  896.      if (recogin2( mx, my, mex+30, mey+140, 0) == 1) { /* 実行 */
  897.         /* 原画復帰 */
  898.         page = 0;
  899.         GDS_putBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by, PSET);
  900.         GDS_putBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET);
  901.         GDS_putBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2, PSET);
  902.         GDS_putBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2, PSET);
  903.  
  904.         page = 1;
  905.         GDS_writePage(page);
  906.         gout();
  907.         line(516, 54, 638, 74, PSET, col7, 2, 0xffff);
  908.         sprintf( wstr, "L%3d-P%3d/", lin+by/ypixel, pixel+bx/xpixel);
  909.         msgset2(516, 55, wstr, col0);
  910.         sprintf( wstr, "L%3d-P%3d", lin+(by+ysiz-1)/ypixel, pixel+(bx+xsiz-1)/xpixel);
  911.         msgset2(516, 65, wstr, col0);
  912.         line(0, 0, 511, 399, PSET, col0, 2, 0xffff);
  913.         line(526-2, 355-2, 526+33, 355+18, PSET, col7, 2, 0xffff); /* 確認メッセージ消去 */
  914.         GDS_displayPage(page);
  915.         gout();
  916.  
  917.         /* 三次元表示     */
  918.         gr3dexe( angle, lin, pixel, bx, by);
  919.         /* 三次元表示終了 */
  920.         
  921.         recogmsg( 526, 355, col0);
  922.         while(1) {
  923.            while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  924.            if (recogin2( mx, my, 526, 355, 0) == 1) {
  925.                line(526-2, 355-2, 526+33, 355+18, PSET, col7, 2, 0xffff); /* 確認メッセージ消去 */
  926.                page = 0;
  927.                GDS_writePage(page);
  928.                GDS_displayPage(page);
  929.                gout();
  930.                gr3dbox(bx, by, xsiz, ysiz, angle);
  931.                break;
  932.             }
  933.         }
  934.         recogmsg(mex+30,  mey+140, col0);
  935.      }
  936.      /* 裏画面表示 */
  937.      backexp(mx, my,  630, 0, 639, 20);
  938.      continue;
  939.    }
  940.    /*
  941.    while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  942.    while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  943.    */
  944.  
  945.    /* ボックスの消去 */
  946.    GDS_putBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by, PSET);
  947.    GDS_putBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET);
  948.    GDS_putBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2, PSET);
  949.    GDS_putBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2, PSET);
  950.    /* メニューの消去 */
  951.    GDS_putBlock(ddadr[0],  ddadr[1],  page, mex,  mey, mex+127, mey+171, PSET);
  952. }
  953.  
  954.  
  955. void dither2(int warea[], int coln, int th1[][2], int th2[][2], int th3[][2], int lin, int pixel)
  956. {
  957. int  mx, my, mosx=400, mosy=100, com;
  958. int  i, j, k, cx, cy, col, px, py;
  959. int  cold[3], cvt1[256], cvt2[256], cvt3[256];
  960. unsigned char page;
  961. char swk[80], swk1[80], swk2[80], swk3[80];
  962. char wname1[64], wname2[64], wname3[64];
  963. FILE *fp1, *fp2, *fp3;
  964. unsigned char headblk[2][512], wblk[6144], *blkp1, *blkp2, *blkp3; /* 512*3*4 */
  965. size_t  bsize, bn;
  966. unsigned gn, goffset;
  967. unsigned char sPage, dPage;
  968. float  kf, kf2;
  969. unsigned char huge *WPTR;
  970.  
  971.    sprintf(wname1, "%s\\warea%1d.lnd", workdir, warea[0]);
  972.    sprintf(wname2, "%s\\warea%1d.lnd", workdir, warea[1]);
  973.    sprintf(wname3, "%s\\warea%1d.lnd", workdir, warea[2]);
  974.    
  975.    page = 1;
  976.    GDS_writePage(page);
  977.    gout();
  978.    Cls;
  979.    GDS_displayPage(page);
  980.    gout();
  981.    page = 0;
  982.    GDS_writePage(page);
  983.    gout();
  984.  
  985.    Cls;
  986.    helpbox2( 512, 0, 639, 399, "ディザカラー");
  987.  
  988.    sprintf(swk1, "<%3d", th1[0][0]);
  989.    symbol(526, 175, swk1, 1,1, col10, 3 ,PSET);
  990.    symbol(526, 245, swk1, 1,1, col10, 3 ,PSET);
  991.    symbol(526, 315, swk1, 1,1, col10, 3 ,PSET);
  992.    for (i = 0; i < coln;  i++) {
  993.          if (i < coln-1) col = col0;
  994.          else            col = col10;
  995.  
  996.          sprintf(swk1, "<%3d", th1[i+1][0]);
  997.          sprintf(swk2, "<%3d", th2[i+1][0]);
  998.          sprintf(swk3, "<%3d", th3[i+1][0]);
  999.          cold[0] = 256*i/(coln-1); cold[1] = 0; cold[2] = 0;
  1000.          dithbox(524+i*20, 158, cold, coln);
  1001.          cold[0] = 0; cold[1] = 256*i/(coln-1), cold[2] = 0;
  1002.          dithbox(524+i*20, 228, cold, coln);
  1003.          cold[0] = 0; cold[1] = 0; cold[2] = 256*i/(coln-1);
  1004.          dithbox(524+i*20, 298, cold, coln);
  1005.          cx = 546+i*20; cy = 175;
  1006.          symbol(cx, cy, swk1, 1,1, col, 3 ,PSET);
  1007.          symbol(cx, cy+70, swk2, 1,1, col, 3 ,PSET);
  1008.          symbol(cx, cy+140, swk3, 1,1, col, 3 ,PSET);
  1009.    }
  1010.  
  1011.    /* work area open */
  1012.    if ((fp1 = fopen(wname1, "rb")) == NULL) {
  1013.       GDS_displayPage(page);
  1014.       gout();
  1015.       pseudeerr(warea[0]);
  1016.       return;
  1017.    }
  1018.    bsize = 512; bn = 1;
  1019.    if (fread( headblk[0], bsize, bn, fp1) != bn) {
  1020.       fclose(fp1); pseudeerr(warea[0]); return;
  1021.    }
  1022.    if (fread( headblk[1], bsize, bn, fp1) != bn) {
  1023.       fclose(fp1); pseudeerr(warea[0]); return;
  1024.    }
  1025.    sprintf(swk, "作業領域 %1d %1d %1d", warea[0], warea[1], warea[2]);
  1026.    msgset(516,  25, swk, col0);
  1027.    strmid(swk, headblk[0], 17, 15);
  1028.    msgset2(516, 45, swk, col0);
  1029.    if (coln == 5) { /* 1/4 mode */
  1030.       sprintf(swk, "L%3d-P%3d/", lin, pixel);
  1031.       msgset2(516, 55, swk, col0);
  1032.       sprintf(swk, "L%3d-P%3d", lin+199, pixel+255);
  1033.       msgset2(516, 65, swk, col0);
  1034.    } else {
  1035.       msgset2(516, 55, "L  1-P  1/", col0);
  1036.       msgset2(516, 65, "L400-P511", col0);
  1037.    }
  1038.  
  1039. /*
  1040.    strmid(swk, headblk[0],  33, 15);  band num 
  1041.    msgset2(516, 65, swk, col0);
  1042. */
  1043.  
  1044.    strmid(swk, headblk[1],  89,  7); /* date */
  1045.    msgset2(516, 75, swk, col0);
  1046.    strmid(swk, headblk[1],  97,  9); /* wrs seen sentor n */
  1047.    msgset2(516, 85, swk, col0);
  1048.    strmid(swk, headblk[1], 106,  7); /* -s */
  1049.    msgset2(516+16, 95, swk, col0);
  1050.    strmid(swk, headblk[1], 114,  9); /* wrs 表示 */
  1051.    msgset2(516, 105, swk, col0);
  1052. /*   strmid(swk, headblk[1], 176, 13);  nasda landsat */
  1053. /*   msgset2(516, 105, swk, col0); */
  1054.    strmid(swk, headblk[1], 189, 15); /* seen id */
  1055.    msgset2(516, 115, swk, col0);
  1056.    strmid(swk, headblk[1], 209,  8); /* sensor name */
  1057.    msgset2(516, 125, swk, col0);
  1058.    msgset2(516, 135, "---------------", col0);
  1059.    
  1060.    GDS_displayPage(page);
  1061.    gout();
  1062.  
  1063. /* */
  1064.    sprintf(swk, "Red   %s", strmid(swk2, headblk[0], 33, 8));
  1065.    msgset2(516, 145, swk2, col10);
  1066.  
  1067.    if ((fp2 = fopen(wname2, "rb")) == NULL) {
  1068.       pseudeerr(warea[1]);
  1069.       fclose(fp1);
  1070.       return;
  1071.    }
  1072.    if ((fp3 = fopen(wname3, "rb")) == NULL) {
  1073.       pseudeerr(warea[1]);
  1074.       fclose(fp1); fclose(fp2);
  1075.       return;
  1076.    }
  1077.  
  1078.    bsize = 1024; bn = 1;
  1079.    if (fread( wblk, bsize, bn, fp2) != bn) {
  1080.       fclose(fp2); pseudeerr(warea[1]); return;
  1081.    }
  1082.    sprintf(swk, "Green %s", strmid(swk2, wblk, 33, 8));
  1083.    msgset2(516, 215, swk2, col12);
  1084.    
  1085.    if (fread( wblk, bsize, bn, fp3) != bn) {
  1086.       fclose(fp3); pseudeerr(warea[2]); return;
  1087.    }
  1088.    sprintf(swk, "Blue  %s", strmid(swk2, wblk, 33, 8));
  1089.    msgset2(516, 285, swk2, col9);
  1090.    
  1091.    /* conv table */
  1092.       kf = 256. / coln;
  1093.       for (i = 0; i < coln; i++) {
  1094.          kf2 = 256. * i / coln;
  1095.          for (j = th1[i][0]; j <= th1[i][1]; j++) {
  1096.             cvt1[j] = kf * (j-th1[i][0]) / (th1[i][1] - th1[i][0] + 1) + kf2;
  1097.          }
  1098.          for (j = th2[i][0]; j <= th2[i][1]; j++) {
  1099.             cvt2[j] = kf * (j-th2[i][0]) / (th2[i][1] - th2[i][0] + 1) + kf2;
  1100.          }
  1101.          for (j = th3[i][0]; j <= th3[i][1]; j++) {
  1102.             cvt3[j] = kf * (j-th3[i][0]) / (th3[i][1] - th3[i][0] + 1) + kf2;
  1103.          }
  1104.       }
  1105.       
  1106.       /* draw start */
  1107.       if (coln == 2) { lin = 1; pixel = 1; }
  1108.       bsize = 512; bn = 4; /* 512*4 byte read */
  1109.       i = 400/ypixel; j = 512/xpixel;
  1110.       if (lin != 0) {
  1111.          fseek(fp1, (long)(512.*(lin-1)), SEEK_CUR);
  1112.          fseek(fp2, (long)(512.*(lin-1)), SEEK_CUR);
  1113.          fseek(fp3, (long)(512.*(lin-1)), SEEK_CUR);
  1114.       }
  1115.       GDS_drawMode(&GDS_data, PSET); /* draw mode set */
  1116.       WPTR = WAREA;
  1117.       for (py = 0; py < i; py+=4) {
  1118.          /* 512*4 byte */
  1119.          if ((fread( wblk, bsize, bn, fp1) != bn) || (fread( wblk+2048, bsize, bn, fp2) != bn) || (fread( wblk+4096, bsize, bn, fp3) != bn)) {
  1120.             fclose(fp1); fclose(fp2); fclose(fp3);
  1121.             pseudeerr(0); return;
  1122.          }
  1123.          for (k = 0; k < 4; k++) {
  1124.             blkp1 = wblk + 512*k + pixel - 1; blkp2 = blkp1 + 2048; blkp3 = blkp1 +4096;
  1125.             for (px = 0; px < j; px++) {
  1126.                (*WPTR) = (*blkp1 + *blkp2 + *blkp3) / 3; /* 3バンドの、強度の平均値 (1/3) */
  1127.                WPTR++;
  1128.                cold[0] = cvt1[ *(blkp1++) ];
  1129.                cold[1] = cvt2[ *(blkp2++) ];
  1130.                cold[2] = cvt3[ *(blkp3++) ];
  1131.          /*    *(WPTR++) = (cold[0]+cold[1]+cold[2]) / 3;   3バンドの、強度の平均値 (1/3) */
  1132.          /*    printf("pixset %d %d %d %d\n", px, cold[0], cold[1], cold[2]);  for debug */
  1133.                pixset( px, py+k, cold);
  1134.             }
  1135.          }
  1136.       }
  1137.       
  1138.       sPage = 0; dPage = 1;
  1139.       GDS_copyBlock(sPage, 512, 0, 639, 399, dPage, 512, 0, PSET);
  1140.  
  1141.       com = 1;
  1142.       dith2exec(526, 355, col0);
  1143.       calcu(600, 355, 0);
  1144.       while (1) {
  1145.          while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  1146.          if (calchk(mx, my, 600, 355, &mosx, &mosy) == 1) continue;
  1147.          if (xychk(mx, my, 526, 355, 526+32, 355+16) == 1) {
  1148.            dith2exec(526, 355, -1);
  1149.            while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  1150.            if (xychk(mx, my, 526, 355, 526+32, 355+16) == 1) {
  1151.               if ((com = dith2menu( com)) == -1) break;
  1152.               if (com == 1) {
  1153.                  pointset( lin, pixel);
  1154.               }
  1155.               if (com == 2) {
  1156.                  sizechg( lin, pixel);
  1157.               }
  1158.               
  1159.               if (com == 3) {
  1160.                  gr3d( lin, pixel);
  1161.               }
  1162.            }
  1163.            dith2exec(526, 355, col0);
  1164.            continue;
  1165.          }
  1166.       }
  1167.  
  1168.    /* tst prog
  1169.       fclose(fp1); fclose(fp2); fclose(fp3);
  1170.       while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  1171.       while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  1172.    */
  1173.    page = 1;
  1174.    GDS_writePage(page);
  1175.    gout();
  1176.    Cls;
  1177.    page = 0;
  1178.    GDS_writePage(page);
  1179.    gout();
  1180.    return;
  1181. }
  1182.  
  1183. void expstart(int lin, int pixel)
  1184. {
  1185. char  swk[80];
  1186.  
  1187.    helpbox( 360, 200, 490, 270, "\x095\x05c示開始点設定");
  1188.                                 /* 表 */
  1189.    sprintf( swk, "%4d ライン", lin);
  1190.    msgset( 380, 230, swk , col0);
  1191.    sprintf( swk, "%4d ピクセル", pixel);
  1192.    msgset( 380, 250, swk , col0);
  1193. }
  1194.  
  1195. void dither()
  1196. {
  1197. int bcl[16];
  1198. int exec, com, com2, com3;
  1199. int mx, my, mosx=400, mosy=100;
  1200. unsigned char page;
  1201. int i, j, cx, cy, cx2, cy2, level, warea[3];
  1202. int (*thw)[2];
  1203. int coln,  th1[6][2];
  1204. int        th2[6][2];
  1205. int        th3[6][2];
  1206. int        th21[6][2];
  1207. int        th22[6][2];
  1208. int        th23[6][2];
  1209. int lin, pixel;
  1210. char swk[24];
  1211. double  wa = 0;
  1212.  
  1213. lin = 1; pixel = 1;
  1214. warea[0] = 1; warea[1] = 2; warea[2] = 3;
  1215. coln = 5; xpixel = 2; ypixel = 2; xypixel = xpixel * ypixel;
  1216. th1[0][0] = 0; th2[0][0] = 0; th3[0][0] = 0;
  1217. for (i = 1; i <= 5; i++) {
  1218.    th1[i][0]   = 256*i/5;   th1[i-1][1] = th1[i][0] - 1;
  1219.    th2[i][0]   = 256*i/5;   th2[i-1][1] = th2[i][0] - 1;
  1220.    th3[i][0]   = 256*i/5;   th3[i-1][1] = th3[i][0] - 1;
  1221. }
  1222. th21[0][0] = 0;   th21[0][1] = 127;
  1223. th21[1][0] = 128; th21[1][1] = 255;
  1224. th21[2][0] = 256;
  1225. th22[0][0] = 0;   th22[0][1] = 127;
  1226. th22[1][0] = 128; th22[1][1] = 255;
  1227. th22[2][0] = 256;
  1228. th23[0][0] = 0;   th23[0][1] = 127;
  1229. th23[1][0] = 128; th23[1][1] = 255;
  1230. th23[2][0] = 256;
  1231.  
  1232. com  = com2 = 7;
  1233. com3 = 0;
  1234.  
  1235. start:
  1236.  
  1237.    page = 1;
  1238.    GDS_displayPage(page);
  1239.    gout();
  1240.    page = 0;
  1241.    GDS_writePage(page);
  1242.    gout();
  1243.  
  1244.       Cls;
  1245.       mttl();
  1246.       bcl[0] = col1;
  1247.       paint(1,30, 1, col7,  1, bcl);
  1248.       menubox( 80, 40, 560, 280, "ディザカラー画像\x095\x05c示条件設定");
  1249.                                                   /* 表 */
  1250.       helpbox( 80,290, 560, 360, "メッセージ");
  1251.     /*  line(90, 63, 350, 278, PSET, col1,  1, 0xffff); */
  1252.       helpbox( 90, 63, 350, 270, "レベル、作業領域設定");
  1253.       if (coln == 5) dithset(coln, th1, th2, th3, 1);
  1254.       else           dithset(coln, th21, th22, th23, 1);
  1255.       wareaset( warea);
  1256.       msgset(360, 70, " ○ 125色カラー", col0);
  1257.       msgset(360, 90, " ○   8色カラー", col0);
  1258.       msgset(360,130, " ○ 終 了", col0);
  1259.       execmsg(480, 170, col0);
  1260.       if (coln != 2) expstart(lin, pixel);
  1261.       calcu(600, 30, 0);
  1262.       wabot(600, 60, 0);
  1263.  
  1264.       GDS_displayPage(page);
  1265.       gout();
  1266.       locate(0,0,COFF);
  1267.       MOS_disp(0);
  1268.       exec = 0;
  1269.  
  1270.       while(1) {
  1271.          if (com == 7) msgset(376, 70, "●", col0);
  1272.          if (com == 8) msgset(376, 90, "●", col0);
  1273.          if (com ==10) msgset(376,130, "●", col0);
  1274.          dithmsg(com, 1);
  1275.  
  1276.          if (exec == 1) {
  1277.             if (com == 10) return;
  1278.             if (coln == 5) dither2( warea, coln, th1,  th2,  th3,  lin, pixel);
  1279.             else           dither2( warea, coln, th21, th22, th23, lin, pixel);
  1280.             goto start;
  1281.          }
  1282. start2:
  1283.          while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  1284.          if (calchk(mx, my, 600, 30, &mosx, &mosy) == 1) continue;
  1285.          if (wabotchk(mx, my, 600, 60) == 1) continue;
  1286.  
  1287.          for (i = 0; i <= 2; i++) {
  1288.             for (j = 0; j <= 2; j++) {
  1289.                cx = 100 + 80 * i; cy = 210 + 20 * j;
  1290.                if (xychk16(mx, my, cx, cy) == 1) {
  1291.                   if (warea[i] != j+1) {
  1292.                      msgset(cx, 210 + 20 * (warea[i]-1), "●", col7);
  1293.                      msgset(cx, 210 + 20 * (warea[i]-1), "○", col0);
  1294.                      warea[i] = j + 1;
  1295.                      msgset(cx, 210 + 20 * (warea[i]-1), "●", col0);
  1296.                   }
  1297.                   while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  1298.                   goto start2;
  1299.                }
  1300.             }
  1301.          }
  1302.          
  1303.          for (level = 0; level < coln-1;  level++) {
  1304.                cx = 120; cy = 167+5-20*level;
  1305.                if (xychk(mx, my, cx-1, cy-1, cx+45, cy+9) == 1)  {
  1306.                   com3 = 3; break;
  1307.                }
  1308.                cx = 200;
  1309.                if (xychk(mx, my, cx-1, cy-1, cx+45, cy+9) == 1)  {
  1310.                   com3 = 13; break;
  1311.                }
  1312.                cx = 280;
  1313.                if (xychk(mx, my, cx-1, cy-1, cx+45, cy+9) == 1)  {
  1314.                   com3 = 23; break;
  1315.                }
  1316.          }
  1317.          
  1318.          if (com3 == 3 || com3 == 13 || com3 == 23) {
  1319.             line(cx-1, cy-1, cx+45, cy+9, PSET, col14,  1, 0xffff);
  1320.             if (coln == 5) {
  1321.                if (com3 ==  3) thw = th1;
  1322.                if (com3 == 13) thw = th2;
  1323.                if (com3 == 23) thw = th3;
  1324.                dithchg(cx, cy, coln, thw, th1, th2, th3, level, com3);
  1325.             } else {
  1326.                if (com3 ==  3) thw = th21;
  1327.                if (com3 == 13) thw = th22;
  1328.                if (com3 == 23) thw = th23;
  1329.                dithchg(cx, cy, coln, thw, th21, th22, th23, level, com3);
  1330.             }
  1331.             line(cx-1, cy-1, cx+45, cy+9, PSET, col7,  1, 0xffff);
  1332.             com3 = 0;
  1333.             continue;
  1334.          }
  1335.          if (xychk16(mx, my,376, 70) == 1) com = 7;
  1336.          if (xychk16(mx, my,376, 90) == 1) com = 8;
  1337.          if (xychk16(mx, my,376,130) == 1) com =10;
  1338.          if (xychk(mx, my,480,170, 480+33, 190+18) == 1) {
  1339.             execmsg(480, 170, -1);
  1340.             while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  1341.             if (xychk(mx, my,480,170, 480+33, 170+18) == 1) {
  1342.                exec = 1;
  1343.                continue;
  1344.             } else {
  1345.                exec = 0;
  1346.                execmsg(480, 170, col0);
  1347.                continue;
  1348.             }
  1349.          }
  1350.          if ((xychk(mx, my,380-2,230-2, 380+33, 230+18) == 1) && com != 8) {
  1351.             line( 380-2,230-2, 380+33, 230+18, PSET, col14, 1, 0xffff);
  1352.             cx2 = 205; cy2 = 125;
  1353.             psmsgcls();
  1354.             dithmsg(21, 1);
  1355.             wa = lin;
  1356.             if (calc( &cx2, &cy2, &wa) == 1) {
  1357.                if (wa <  1 ) lin = 1;
  1358.                else if (wa > 201) lin = 201;
  1359.                else lin = wa;
  1360.                sprintf( swk, "%4d", lin);
  1361.                line( 380-2,230-2, 380+33, 230+18, PSET, col7, 2, 0xffff);
  1362.                msgset( 380, 230, swk , col0);
  1363.             } else {
  1364.                line( 380-2,230-2, 380+33, 230+18, PSET, col7, 1, 0xffff);
  1365.             }
  1366.             psmsgcls();
  1367.          }
  1368.          if ((xychk(mx, my,380-2,250-2, 380+33, 250+18) == 1) && com != 8) {
  1369.             line( 380-2,250-2, 380+33, 250+18, PSET, col14, 1, 0xffff);
  1370.             cx2 = 205; cy2 = 125;
  1371.             psmsgcls();
  1372.             dithmsg(22, 1);
  1373.             wa = pixel;
  1374.             if (calc( &cx2, &cy2, &wa) == 1) {
  1375.                if (wa <  1 ) pixel = 1;
  1376.                else if (wa > 257) pixel = 257;
  1377.                else pixel = wa;
  1378.                sprintf( swk, "%4d", pixel);
  1379.                line( 380-2,250-2, 380+33, 250+18, PSET, col7, 2, 0xffff);
  1380.                msgset( 380, 250, swk , col0);
  1381.             } else {
  1382.                line( 380-2,250-2, 380+33, 250+18, PSET, col7, 1, 0xffff);
  1383.             }
  1384.             psmsgcls();
  1385.          }
  1386.          if (com != com2) {
  1387.             if (com2 == 7) {
  1388.                msgset(376, 70, "●", col7); msgset(376, 70, "○", col0);
  1389.                if (com == 8) {
  1390.                   line( 360,200, 490+10, 270+8, PSET, col7, 2, 0xffff);
  1391.                   coln = 2; xpixel = 1; ypixel = 1; xypixel = xpixel * ypixel;
  1392.                   dithset(coln, th21, th22, th23, 1);
  1393.                   wareaset( warea);
  1394.                }
  1395.             }
  1396.             if (com2 == 8) {
  1397.                msgset(376, 90, "●", col7); msgset(376, 90, "○", col0);
  1398.                if (com == 7) {
  1399.                   expstart(lin, pixel);
  1400.                   coln = 5; xpixel = 2; ypixel = 2; xypixel = xpixel * ypixel;
  1401.                   dithset(coln, th1, th2, th3, 1);
  1402.                   wareaset( warea);
  1403.                }
  1404.             }
  1405.             if (com2 == 10) {
  1406.                msgset(376,130, "●", col7); msgset(376,130, "○", col0);
  1407.                if ((com == 8) && (coln == 5)) {
  1408.                   line( 360,200, 490+10, 270+8, PSET, col7, 2, 0xffff);
  1409.                   coln = 2; xpixel = 1; ypixel = 1; xypixel = xpixel * ypixel;
  1410.                   dithset(coln, th21, th22, th23, 1);
  1411.                   wareaset( warea);
  1412.                }
  1413.                if ((com == 7) && (coln == 2)) {
  1414.                   expstart(lin, pixel);
  1415.                   coln = 5; xpixel = 2; ypixel = 2; xypixel = xpixel * ypixel;
  1416.                   dithset(coln, th1, th2, th3, 1);
  1417.                   wareaset( warea);
  1418.                }
  1419.             }
  1420.             psmsgcls();
  1421.             com2 = com;
  1422.          }
  1423.       }
  1424. }
  1425.  
  1426.  
  1427.  
  1428.